# Глобальная очередь событий

Главный модуль для управления временным потоком игры.
Временной поток состоит из отрезков времени, между двумя событиями, которые влияют на состояние аккаунтов игроков.
События всех игроков выстраиваются в общую очередь. Очередь дискретна - каждое событие синхронизировано посекундно.
Проверка на завершение события (движение очереди) осуществляется когда игроки совершаются какие-либо действия (переходят по страницам).
Если два события попадают на одну секунду, то они обрабатываются в порядке приоритета (например если Атака совпадает по времени с Переработать,
на тех же координатах, то вначале обрабатывается Атака, а потом Переработать).  

Каждое событие имеет начало (время запуска) и конец (время завершения события). Некоторые события можно отменить. Отмена некоторых событий порождает 
другие события (например отмена задания флота порождает новое задание возврата флота).

Главные типы событий аккаунта:
 - Счётчики времени на аккаунте игрока (действие офицеров, удаление аккаунта итп.)
 - Строительство на планете/луне
 - Исследование
 - Строительство на верфи
 - Задания для флота и МПР
 - Глобальные события для всех игроков (релогин, чистка виртуального лома, удаление уничтоженных планет, пересчёт очков 3 раза в сутки итп.)

Запись старых очков: 8:05, 16:05, 20:05 по серверу

Статичный пересчёт очков игрока: 0:10 по серверу

Виртуальное ПО исчезает в понедельник в 1:10 по серверу, если на/от него не летит ни одного флота и если там 0 ресурсов.

Типы заданий:
- "CommanderOff": заканчивается офицер: Командир
- "AdmiralOff": заканчивается офицер: Адмирал
- "EngineerOff": заканчивается офицер: Инженер
- "GeologeOff": заканчивается офицер: Геолог
- "TechnocrateOff": заканчивается офицер: Технократ
- "UnbanPlayer": разбанить игрока
- "ChangeEmail": записать постоянный почтовый адрес
- "AllowName": разрешить смену имени игрока
- "AllowAttacks": отменить запрет атак у игрока
- "UnloadAll": сделать релогин всех игроков
- "CleanDebris": чистка виртуальных полей обломков
- "CleanPlanets": удаление уничтоженных планет / покинутых лун
- "CleanPlayers": удаление неактивных игроков и поставленных на удаление (1:10)
- "UpdateStats": сохранение старых очков статистики
- "RecalcPoints": пересчёт статистики игроков
- "RecalcAllyPoints": пересчёт статистики альянсов
- "Build": завершение постройки на планете (sub_id - ID задания в очереди построек, obj_id - тип постройки)
- "Demolish": завершение сноса на планете (sub_id - ID задания в очереди построек, obj_id - тип постройки)
- "Research": исследование (sub_id - номер планеты где было запущено исследование, obj_id - тип исследования)
- "Shipyard": задание для верфи (sub_id - номер планеты, obj_id - тип постройки)
- "Fleet": Задание флота / Атака МПР (sub_id - номер записи в таблице флота)
- "Debug": отладочное событие
- "AI": задания для бота (sub_id - номер стратегии, obj_id - текущий номер блока)
- "Coupon": зачисление купонов (обработчик находится в coupon.php)

Как происходит обновление очереди:
После очередного клика одного из юзеров проверяется каждое задание очереди на завершение. Если задание завершено - вызывается его обработчик и задание удаляется из очереди.

## CRON

Если вы хотите, вы можете назначить на периодическое выполнение скрипт cron.php, чтобы очередь двигалась самостоятельно, без действий игроков.
Но в оживленной вселенной делать это совершенно не обязательно.
